嗨嗨大家好!這週是漫長的一週!今天我們要繼續 SRE 方法論的第六條:資源部署,這裡是今天讀的原文出處:Introduction,那我們開始囉!
書中提到資源部署的代價是昂貴的,所以操作時務必謹慎小心。現今有許多工具能夠輔助我們進行相對穩定的部署。
目前的部署流程會像下圖:

這裡我們先著重看 cloudbuild.yaml,目前透過 Cloud Build 的 yaml 檔去部署:
gradle build指令。timeout: 1800s
steps:
- name: gradle:7.6-jdk17
  entrypoint: gradle
  args: ['build']
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', '${_CI_REGISTRY_IMAGE}/${PROJECT_ID}/${_CI_REGISTRY_IMAGE_NAME}/${_CONTAINERNAME}:$COMMIT_SHA', '--build-arg=ENVIRONMENT=${_NAMESPACE}','.']
  id: 'build-gar'
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', '${_CI_REGISTRY_IMAGE}/${PROJECT_ID}/${_CI_REGISTRY_IMAGE_NAME}/${_CONTAINERNAME}:$COMMIT_SHA']
  id: 'push-gar'
  waitFor:
  - 'build-gar'
- name: node:18
  entrypoint: bash
  id: build-cdk8s
  dir: cdk8s
  args: ["-c", "npm install && npm run build && cp -r dist /workspace/dist && ls /workspace/dist && cat /workspace/dist/*.yaml"]
  env:
  - 'NAMESPACE=$_NAMESPACE'
  - 'CONTAINERNAME=$_CONTAINERNAME'
  - 'CI_COMMIT_SHA=$COMMIT_SHA'
  - 'NODE_ENV=$_NODE_ENV'
  waitFor: 
    - 'build-gar'
- name: 'gcr.io/cloud-builders/kubectl'
  args: ['apply', '-f', '/workspace/dist', '--namespace=${_NAMESPACE}', '--record']
  id: 'update-gke'
  env:
  - 'CLOUDSDK_COMPUTE_ZONE=${_ZONE}'
  - 'CLOUDSDK_CONTAINER_CLUSTER=${_CLUSTER}'
  waitFor:
    - 'build-cdk8s'
今天主要復盤了工作中 Cloud Build 的部署方式,透過流水線的設置,除了部署的穩定度提高很多,也讓開發人員能夠安心地持續交付。接下來的內容是「效率與性能」!同時奔向我們第一章的終結!週日見!